package com.example.demo.day0302;

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;

/**
 * RandomAccessFile类支持“随机访问”的方式，程序可以直接跳到文件的任意地方来读、写文件
 */
public class DemoRandomAccessFile {
    public static void main(String[] args) {
        try {
            DemoRandomAccessFile.testRandomAccessFileRead();
            DemoRandomAccessFile.testRandomAccessFileWrite();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * RandomAccessFile的构造有两个参数，参数1是读写的文件的路径
     * 参数2是指定RandomAccessFile 的访问模式
     */
    public static void testRandomAccessFileRead() throws Exception {
        RandomAccessFile ra = new RandomAccessFile("D:\\demo\\src\\main\\java\\com\\example\\demo\\day0302\\tt9.txt","r");
        //r:以只读方式打开

//        ra.seek(0);//设置读取文件的起始点，从0开始
        ra.seek(8);//通过设置读取文件内容的起始点，来达到从文件的任意位置读取
        byte[] b = new byte[1024];

        int len = 0;

        while ((len = ra.read(b)) !=-1){
            System.out.println(new String(b,0,len));
        }
    }
    public static void testRandomAccessFileWrite() throws Exception{
        RandomAccessFile rb = new RandomAccessFile("D:\\demo\\src\\main\\java\\com\\example\\demo\\day0302\\tt9.txt","rw");
        //rw:打开以便读取和写入

//        rb.seek(0);//设置写的起始点，0代表从开头写
        rb.seek (rb. length());//设置写的起始点，ra. length()代表从文件的最后结尾写，也就是文件的追加
       ///如果是在文件开头或者中间的某个位置开始写的话，就会用写的内容覆盖掉等长度的原内容|

        rb.write("hello".getBytes());

        rb.close();//关闭流

    }
}
